The present invention relates generally to computer systems, and more particularly, to a lossless data transmission system and method.
Data transmission is a necessary operation for computer systems. Data in a computer system may be transmitted between internal components, peripherals, and/or other computer systems, depending on the type and purpose of the data. Such transmission may occur either synchronously or asynchronously.
The rate at which data is transmitted depends on a variety of factors, such as memory access time and bandwidth, which may form “bottlenecks” or congestion areas which negatively impact the transfer rate. Memory access time determines the speed at which data can be read from and written to memory and varies greatly depending on the type of memory. For instance, memory access times for random access memory are much faster than those for disk drives, which are in turn much faster than most removable media. Bandwidth identifies the maximum rate at which data can be transmitted through the system or to other systems. The bottlenecks limit the bandwidth because the system can only transmit data at the speed of the slowest component in the transmission chain. For example, if a system is capable of transmitting at 1.5 Megabits/second (“Mbps”) to a peripheral, but the maximum available bandwidth between the system and the peripheral is 1 Mbps, the bandwidth forms a bottleneck that limits the system to transmitting at the lower rate of 1 Mbps.
Attempts to solve the performance issues presented by bottlenecks have resulted in a number of solutions, none of which are completely satisfactory. One solution has been to use compression techniques to compress the data. Such compression typically reduces the amount of data to be transmitted by removing “unnecessary” data. The actual amount of compression depends on the type of file and compression algorithm used. Compression may be either “lossless” or “lossy.” Lossless compression decompresses the compressed data back to a perfect original, bit for bit. Lossy compression often results in a higher compression ratio at the expense of a perfect copy since some of the data is lost during lossy compression.
Yet another partial solution, focusing particularly on graphics, has been to develop a library of basic shapes or “elements.” A graphic can then be constructed from the basic shapes in the library, assuming the library has the necessary shapes. This limited approach does not present a viable solution for graphics which contain elements not found in the library and so makes it difficult to construct complex graphics.
Another solution has been to simply provide more bandwidth for the data. This essentially furnishes a bigger “pipe” for the data, but is not a satisfactory solution, particularly for applications requiring the transfer of large amounts of data. This is due in part to the inability to read and write the data to and from memory quickly enough.
Improving memory access times is another partial solution. Current technological solutions to improving memory access times focus largely on the physical design of the memory itself, but existing limitations in memory technology prevent rapid advancements in this area.
Therefore, what is needed is an improved method to transmit large amounts of data efficiently and without loss.